
#ifndef MAPELEMENT_H_
#define MAPELEMENT_H_

#include <string>

typedef enum t{
	STREET = 1,
	INTERSECTION = 2,
	OBJECT = 3
}MapElementType;

typedef struct is{
	int	width;
	int height;
}ImageSize;

class MapElement{
private:
	std::string		id;
	MapElementType	type;
	int				positionX;
	int				positionY;
	std::string		imageFilename;
	ImageSize		imageSize;

public:
	
	MapElement(){}

	virtual ~MapElement(){}

	std::string getId();
	
	MapElementType getMapElementType();

	/**
	 * Metodo getter de la posicion en el eje X del elemento.
	 * @return Retorna la posicion en el eje X.
	 */
	int getPositionX();

	/**
	 * Metodo getter de la position en el eje Y del elemento.
	 * @return Retorna la posicion en el eje Y.
	 */ 
	int getPositionY();

	/**
	 * Metodo getter de la ruta de la imagen del elemento.
	 * @return Retorna la ruta de la imagen.
	 */
	std::string getImageSource();

	int getImageWidth();

	int getImageHeight();

	void setId(std::string id);

	void setMapElementType(MapElementType t);

	/**
	 * Metodo setter de la posicion en el eje X del objeto.
	 * @param x de tipo unsigned.
	 */ 
	void setPositionX(int x);

	/**
	 * Metodo setter de la posicion en el eje Y del objeto.
	 * @param y de tipo unsigned.
	 */ 
	void setPositionY(int y);

	/**
	 * Metodo setter de la ruta de la imagen del objeto.
	 * @param src de clase std::string.
	 */
	void setImageSource(std::string src);

	void setImageWidth(int w);

	void setImageHeight(int h);

	/**
	 * Devuelve positivo si la posicion X de "this" es mayor que me,
	 *			negativo si la posicion X de "this" es menor que me.
	 */
	int comparePositionX(MapElement *me);

	int comparePositionY(MapElement *me);

    /**
	 * Operador comparacion por igual.
	 */
    int operator==(MapElement &original);

    /**
	 * Operador comparacion por diferencia.
	 */
    int operator!=(MapElement &original);

	int operator<(MapElement &original);

	int operator>(MapElement &original);

	int operator<=(MapElement &original);

	int operator>=(MapElement &original);
};


#endif /* MAPELEMENT_H_ */